package de.mnit.basis.sys;

import java.lang.management.ManagementFactory;
import java.util.Enumeration;
import java.util.Properties;

import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.sys.event.S_Verarbeite;

/**
 * @author Michael Nitsche
 */
public class Sys {

	public static void main(String[] args) {
		try {
			Ausgabe.debug(Sys.gProzessID());
			Properties p=System.getProperties();
			Enumeration<Object> e=p.keys();
			while(e.hasMoreElements()) {
				Object o=e.nextElement();
				Object r=p.get(o);
				Ausgabe.debug(o,r);
			}
		}
		catch(Throwable t)   { Fehler.zeig(t); }
	}


	public static String gPfadTemp()            { return System.getProperty("java.io.tmpdir"); }
	public static String gPfadHome()            { return System.getProperty("user.home"); }

	public static String gArchitektur()         { return System.getProperty("os.arch"); }
	public static String gArchitekturModell()   { return System.getProperty("sun.arch.data.model"); }


	/**
	 * Möglichkeiten:
	 * Linux,
	 * Windows XP, Windows NT, Windows 2000, Windows 2003
	 * Solaris, SunOS,
	 */
	public static String gOsName()              { return System.getProperty("os.name"); }
	public static String gOsVersion()           { return System.getProperty("os.version"); }
	public static String gSchriftsatz()         { return System.getProperty("file.encoding"); }
	public static String gLand()                { return System.getProperty("user.country"); }
	public static String gSprache()             { return System.getProperty("user.language"); }
	public static String gBenutzerName()        { return System.getProperty("user.name"); }
	public static String gDesktop()             { return System.getProperty("sun.desktop"); }

	/** / **/
	public static String gTrennerVerz()         { return System.getProperty("file.separator"); }

	/** : **/
	public static String gTrennerPfad()         { return System.getProperty("path.separator"); }

	public static String gTrennerZeile()        { return System.getProperty("line.separator"); }
	public static String gJavaVersion()         { return System.getProperty("java.version"); }

	public static String gKlassenpfad()         { return System.getProperty("java.class.path"); }
	public static String gAktuellesVerz()       { return System.getProperty("user.dir"); }

	public static long gProzessUptimeMSek() {
		return ManagementFactory.getRuntimeMXBean().getUptime();
	}

	public static Integer gProzessID() {
		String s=ManagementFactory.getRuntimeMXBean().getName();
		Ausgabe.debug(s);
		if(s==null)
			return null;
		if(!s.matches("^([0-9]+).*$")) s="";
		s=s.replaceFirst("^([0-9]+).*$", "$1");
		if(s.length()>0)
			return Integer.parseInt(s);
		return null;
	}

	public static boolean pause(int ms) {
		try   { Thread.sleep(ms); }
		catch(InterruptedException e)   { return false; }
		return true;
	}

	public static boolean pauseSekunden(int sekunden) {
		return pause(sekunden*1000);
	}

	public static boolean pauseMinuten(int minuten) {
		return pause(minuten*60*1000);
	}


	public static void eEnde(final S_Verarbeite z) {
	    Runtime.getRuntime().addShutdownHook( new Thread(){
	    	public void run() {
	    		z.verarbeite();
	    	}
	    });
	}

}
